/**
 * PLM项目网络助手
 * 提供网络状态检测和监听功能
 */

// 尝试导入全局网络助手
let globalNetworkHelper = null;
try {
  globalNetworkHelper = require('../../../helpers/network_helper.js');
} catch (e) {
  console.warn('无法导入全局网络助手，使用本地实现');
}

// 缓存网络状态
let cachedNetworkStatus = null;

/**
 * 获取网络状态
 * @param {Boolean} [forceRefresh=false] 是否强制刷新
 * @return {Promise<Object>} 网络状态对象
 */
async function getNetworkStatus(forceRefresh = false) {
  // 如果全局助手可用，则使用它
  if (globalNetworkHelper && globalNetworkHelper.getNetworkStatus) {
    return globalNetworkHelper.getNetworkStatus(forceRefresh);
  }
  
  // 如果有缓存且不需要强制刷新，直接返回缓存
  if (!forceRefresh && cachedNetworkStatus) {
    return cachedNetworkStatus;
  }
  
  // 否则使用本地实现
  try {
    const res = await wx.getNetworkType({});
    const status = {
      isConnected: res.networkType !== 'none',
      networkType: res.networkType,
      timestamp: Date.now()
    };
    
    // 缓存结果
    cachedNetworkStatus = status;
    return status;
  } catch (e) {
    console.error('获取网络状态失败:', e);
    return {
      isConnected: true, // 默认假设有网络
      networkType: 'unknown',
      error: e.message || String(e),
      timestamp: Date.now()
    };
  }
}

/**
 * 监听网络状态变化
 * @param {Function} callback 状态变化回调
 * @return {Function} 取消监听的函数
 */
function listenNetworkStatus(callback) {
  // 如果全局助手可用，则使用它
  if (globalNetworkHelper && globalNetworkHelper.listenNetworkStatus) {
    return globalNetworkHelper.listenNetworkStatus(callback);
  }
  
  // 否则使用本地实现
  try {
    wx.onNetworkStatusChange(function(res) {
      // 更新缓存
      cachedNetworkStatus = {
        isConnected: res.isConnected,
        networkType: res.networkType,
        timestamp: Date.now()
      };
      
      // 调用回调
      if (typeof callback === 'function') {
        callback(cachedNetworkStatus);
      }
    });
    
    // 返回取消监听函数
    return function() {
      try {
        wx.offNetworkStatusChange();
      } catch (e) {
        console.warn('取消网络状态监听失败:', e);
      }
    };
  } catch (e) {
    console.error('设置网络状态监听失败:', e);
    // 返回空函数作为取消监听的占位
    return function() {};
  }
}

// 导出模块
module.exports = {
  getNetworkStatus,
  listenNetworkStatus
}; 